package com.xhu.collegestudentrentalsystem.config;

import com.google.code.kaptcha.Producer;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration  //声明这是一个配置类
public class KaptchaConfig {

    //Kaptcha核心对象是一个接口Producer，这个接口有一个默认的实现类DefaultKaptcha。我们自己需要实现这个接口

    @Bean    //声明一个Bean，这个Bean会被Spring容器所管理(第三方的Bean)
    public Producer kaptchaProducer(){   //返回这个接口
        //（3） 创建一个Properties对象，properties数据可以通过properties文件写（Properties类就是为了封装这类文件的数据的），
            //也可以不在properties文件里写，就在此次实例化一个对象，然后通过这个对象添加值。在以下对其进行配置：
        Properties properties=new Properties();
        properties.setProperty("kaptcha.image.width","100");
        properties.setProperty("kaptcha.image.height","40");
        properties.setProperty("kaptcha.textproducer.font.size","32");
        properties.setProperty("kaptcha.textproducer.font.color","0,0,0");
        properties.setProperty("kaptcha.textproducer.char.string","0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");  //验证码是几个随机字符，这里给出字符的范围（数字和字母）
        properties.setProperty("kaptcha.textproducer.char.length","4");  //生成字符长度
        properties.setProperty("kaptcha.noise.impl","com.google.code.kaptcha.impl.NoNoise");    //设置采用的噪声类 （因为以上生成的字符就是有变形的，不采用噪声类也可以）

        //（1）需要实例化Producer的实现类
        DefaultKaptcha kaptcha=new DefaultKaptcha();
        //（2）给这个对象传入参数，并封装在Config对象里，而Config对象需要传入一个Properties对象(之中存储的是key-value，就相当于map)，所以前面还需要实例化一个Properties
            //逻辑：kaptcha是用Config配置的，而Config需要依赖于Properties。（4）将写好的properties对象传给config就可以了
        Config config=new Config(properties);
        kaptcha.setConfig(config);    //将这个kaptcha对象设置（set）给组件，最后返回这个配置好的kaptcha对象
        return kaptcha;
        //以上，在服务启动的时候就会被自动地装配到容器中。
        //然后在controller中写一个调用方法，然后在登录界面login.html中用Thymeleaf模板导入controller中的路径即可。
    }



}
